﻿#pragma once

#include "../graphic/BaseGraphicView.h"

#include <boost/signal.hpp>
#include <boost/ptr_container/ptr_vector.hpp>
#include "../graphic/DeductionView.h"
#include "../../../utils/gui/Form.h"
#include "../../../domain/models/CardSet.h"
#include "../../../domain/models/Player.h"
#include "../../../domain/network/GameClient.h"

namespace Views {
	namespace Client {
		class DeductionView: public Graphic::DeductionView
		{
			Domain::Network::GameClient* client; /**< Klient gracza */
			Players::Player* current_player; /**< Aktualny gracz */
			Cards::CardsCollection cards; /**< Wszystkie karty w grze */

		public:
			/**
			* @param form Główna formatka aplikacji
			* @param game_client Połączony z serwerem klient gry
			* @param cards Karty w grze
			*/
			DeductionView(Utils::GUI::Form* form, Domain::Network::GameClient* game_client, Cards::CardsCollection cards);

			/**
			* Rozpoczyna oczekiwanie na otrzymanie od serwera decyzji gracza, który może pokazać więcej niż 1 kartę
			*/
			virtual void openPickCardDialog(Players::Player*, Cards::CardSet&);

		protected:
			/**
			* Funkcja odbierająca od serwera dane o karcie wybranej przez gracza posiadającego więcej niż 1 kartę
			* spośród tych w oskarżeniu
			* @param packet Pakiet zawierający dane tej karty
			*/
			virtual void onDeductedCardPick(sf::Packet packet);
			/**
			* Wysyła informacje o wybranej karcie do serwera
			*/
			virtual void onSearchedCardsPick(Cards::PlayerCard*, Cards::WeaponCard*);

			/**
			* Wysyła do serwera informację, że gracz zamknął okienko dialogowe z informacją o znalezionej karcie
			*/
			virtual void onDeductedCardsDialogClose();
		};
	}
}

